Уровни доступа
Уровни доступа (таблица 1) вводятся для проверки на уровне ядра СУБД ЛИНТЕР прав на осуществление чтения/записи информации.
Вводятся следующие уровни доступа:
-
для пользователя (субъекта):
-
RAL-уровень доступа. Пользователь может получать (читать) информацию, RAL-уровень которой не выше его собственного уровня доступа;
-
WAL-уровень доверия на понижение уровня конфиденциальности. Пользователь не может вносить информацию с уровнем доступа (RAL-уровнем) более низким, чем данный WAL-уровень пользователя. Т.е. пользователь не может сделать доступную ему информацию менее конфиденциальной, чем указано в данном параметре.
-
-
для информации:
-
RAL-уровень чтения. Пользователь может получать (читать) информацию, RAL-уровень которой не выше его собственного RAL-уровня (может читать менее конфиденциальные данные);
-
WAL-уровень ценности или уровень доступа на запись (модификацию, удаление). Пользователь может модифицировать (удалять) информацию, WAL-уровень которой не выше его RAL-уровня.
-
Возможные соотношения уровней представлены в таблице 1.
RALп | WALп | |
---|---|---|
RALи | (чтение) RALи ≤ RALп | (запись) RALи ≥ WALп |
WALи | (модификация, удаление) WALи ≤ RALп | ─ |
RALп – RAL-уровень доступа пользователя. WALп – WAL-уровень доверия пользователя на понижение уровня конфиденциальности. RALи – RAL-уровень чтения информации. WALи – WAL-уровень ценности или уровень доступа на запись (модификацию, удаление) информации.
Контролируются 10 уровней доступа (номера 1-10). Уровни 11-15 зарезервированы. Всем создаваемым пользователям БД по умолчанию устанавливается уровень доступа 0 (признак отсутствия контроля по мандатному доступу, т.е. пользователи имеют возможность читать и модифицировать все доступные им по мандатному принципу контроля данные).
Создать пользователя с произвольными RAL/WAL-уровнями может только создатель БД. Остальные администраторы БД (пользователи категории DBA) имеют право создавать пользователей БД (или изменять им уровень доступа) только в пределах отведенных данному администратору RAL/WAL-уровней (на чтение – не выше, на запись – не ниже).
Пользователь может явно задавать уровень доступа вводимых данных, указывая в списке атрибутов уровни доступа для соответствующих записей и полей (при операции INSERT
или UPDATE
).
RAL-уровень и WAL-уровень вносимых данных берутся как максимум установленных RAL-уровня и WAL-уровня для канала/пользователя, вносящего/изменяющего данные.
Защищаемые объекты: пользователи, таблицы, столбцы, записи (вносятся при INSERT
), поля записей (изменяются при UPDATE
).
Пример
create if not exists level "NS" = 1; create if not exists level "DSP" = 2; create if not exists level "S" = 3; create if not exists level "C" = 4; create if not exists level "CC" = 5; drop user U1 cascade; create user U1 identified by '12345678'; grant dba to U1; alter user U1 level("S", "C"); ! < Метка доступа > пользователя ##3#4. username U1/12345678 ! < Метка доступа > таблицы ##3#4 (наследуется от < метки доступа > создателя). create or replace table TAB1 (id int, name char(10)); ! < Метка доступа > добавляемой записи ##4#4. ! Пользователь может внести строку ##4#4, т.к. RAL-уровень информации совпадает с !WAL-уровнем пользователя. ! Но у пользователя нет доступа на запись в таблицу, т.к. WAL-уровень таблицы выше !RAL-уровня пользователя. ! ошибка 1070 insert into TAB1 values (101,'new1'); ! < Метка доступа > добавляемой записи ##3#4. ! Пользователь не может внести строку ##3#4, т.к. RAL-уровень информации ниже !WAL-уровня пользователя. ! ошибка 1070 insert into TAB1##3#4 values (102,'new2'); ! ошибка 1070 insert into TAB1##4#4 values (103,'new3'); username SYSTEM/MANAGER8 drop user U2 cascade; create user U2 identified by '12345678'; grant dba to U2; alter user U2 level("S", "DSP"); ! < Метка доступа > пользователя ##3#2. username U2/12345678 ! < Метка доступа > таблицы ##3#2. create or replace table TAB2 (id int, name char(10)); insert into TAB2##4#4 values (102,'new2');
Информация об уровнях доступа хранится в системной таблице $$$LEVEL
(см. документ
«Системные таблицы и представления», подраздел
«$$$LEVEL»).